package com.atguigu.chap05;

import java.util.Random;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;

/**
 * 案例：利用倒计数器实现功能：java.util.concurrent.CountDownLatch
 *  案例：6个同学陆续离开教室后值班同学才可以关门。
 */
public class CountDownDemo {
    public static void main(String[] args) throws InterruptedException {
        CountDownLatch countDownLatch = new CountDownLatch(6); // 6个同学

        //创建6个线程,用于执行子任务
        for (int i = 1; i <= 6; i++) {
            String num = String.valueOf(i);
            new Thread(()->{
                System.out.println(Thread.currentThread().getName() + "\t" + "---学习完成,准备离开，同学="+num);
                try {
                    TimeUnit.SECONDS.sleep(new Random().nextInt(5));
                } catch (InterruptedException e) {

                }
                System.out.println(Thread.currentThread().getName() + "\t" + "---离开了教室，同学="+num);
                countDownLatch.countDown(); // 计数器减一
            },"同学"+num).start();
        }

        //不见不散
        countDownLatch.await(); // main线程用于执行主任务   阻塞方法，6个子任务执行完，不再阻塞，开始执行主任务。

        //过时不候
        //阻塞时间到了，不管子任务是否都完成，就会开始执行主任务。
        System.out.println(Thread.currentThread().getName() + "\t" + "---关门");
    }
}
